import java.util.HashMap;
import java.util.HashSet;

/**
 * 面试题 01.01. 判定字符是否唯一
 * https://leetcode.cn/problems/is-unique-lcci/description/
 */
class Solution {
    //位操作——位图，二进制判断第x位是否是1，1就表示存在，0就表示不存在
    public boolean isUnique(String astr) {
        int len = astr.length();
        if(len > 26) return false;
        int num = 0;
        for(int i = 0; i < len; i++) {
            char tmp = astr.charAt(i);
            int x = (int)tmp - 96;
            if(!isOne(num, x)) {
                num = makeOne(num, x);
            } else {
                return false;
            }
        }
        return true;
    }
    //查询x位是否为1
    public static boolean isOne(int num, int x) {
        return ((num >> x) & 1) == 1;
    }
    //把x位修改为1
    public static int makeOne(int num, int x) {
        return (1 << x) | num;
    }
    //2、哈希表
    public boolean isUnique2(String astr) {
        HashSet<Character> set = new HashSet<>();
        for(int i = 0; i < astr.length(); i++) {
            if(!set.contains(astr.charAt(i))) {
                set.add(astr.charAt(i));
            } else {
                return false;
            }
        }
        return true;
    }
}